]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspace: Account for window picker padding
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 26 Jun 2020 00:56:35 +0000 (02:56 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Mon, 6 Jul 2020 22:06:53 +0000 (00:06 +0200)
Workspaces are supposed to request the work area as their preferred
size, however the widget will adjust the sizes returned by the
layout manager to account for borders and padding.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1345

js/ui/workspace.js

index 14670d10042f2e373198c995b78baa6de004dc39..f4189ec4dac654fe66ced2e4215d5969d6518010 100644 (file)
@@ -520,26 +520,40 @@ var WorkspaceLayout = GObject.registerClass({
         return this._layout.strategy.computeWindowSlots(this._layout, availArea);
     }
 
+    _getAdjustedWorkarea(container) {
+        const workarea = this._workarea.copy();
+
+        if (container instanceof St.Widget) {
+            const themeNode = container.get_theme_node();
+            workarea.width -= themeNode.get_horizontal_padding();
+            workarea.height -= themeNode.get_vertical_padding();
+        }
+
+        return workarea;
+    }
+
     vfunc_set_container(container) {
         this._container = container;
         this._stateAdjustment.actor = container;
     }
 
     vfunc_get_preferred_width(container, forHeight) {
+        const workarea = this._getAdjustedWorkarea(container);
         if (forHeight === -1)
-            return [0, this._workarea.width];
+            return [0, workarea.width];
 
-        const workAreaAspectRatio = this._workarea.width / this._workarea.height;
+        const workAreaAspectRatio = workarea.width / workarea.height;
         const widthPreservingAspectRatio = forHeight * workAreaAspectRatio;
 
         return [0, widthPreservingAspectRatio];
     }
 
     vfunc_get_preferred_height(container, forWidth) {
+        const workarea = this._getAdjustedWorkarea(container);
         if (forWidth === -1)
-            return [0, this._workarea.height];
+            return [0, workarea.height];
 
-        const workAreaAspectRatio = this._workarea.width / this._workarea.height;
+        const workAreaAspectRatio = workarea.width / workarea.height;
         const heightPreservingAspectRatio = forWidth / workAreaAspectRatio;
 
         return [0, heightPreservingAspectRatio];